from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
import os
import sys

OPENAI_API_KEY = "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"

CHOICE_ANALYSIS_PROMPT = """
您作为一个教育分析师，现在面对一道选择题，需要您分析学生为什么可能会选错答案，并解释正确答案的原因。同时，根据学生的错误选择，提出针对性的学习建议，帮助他们理解并掌握相关知识点。

题目详情如下：
- 题目：{question_text}
- 正确答案：{correct_answer}
- 学生选择的答案：{student_answer}

请根据这些信息，进行以下任务：
1. 分析为什么学生可能会选择错误答案{student_answer}。
2. 解释为什么{correct_answer}是正确的。
3. 给出建议，帮助学生理解和掌握这类题目的解题方法。
请使用以下JSON格式输出您的评价和建议：
{{
  "error_analysis": "学生可能选择错误答案的原因是...",
  "correct_answer_explanation": "正确答案之所以正确，是因为...",
  "suggestions": "为了避免类似错误，可以..."
}}
"""

os.environ["http_proxy"] = "http://127.0.0.1:10808"
os.environ["https_proxy"] = "http://127.0.0.1:10808"


def evaluate_choice_question(question: str, correct_answer: str, user_answer: str):
    """
    这个函数评估用户对选择题的回答，并提供对答案的分析。

    参数:
    question (str): 选择题的问题文本。
    correct_answer (str): 选择题的正确答案。
    user_answer (str): 用户的答案。

    返回:
    dict: 包含评估成功状态、对用户答案的分析以及在评估过程中出现的任何错误的字典。
    """
    try:
        # 分析用户为什么会选错这一道题
        prompt_template = ChatPromptTemplate.from_template(CHOICE_ANALYSIS_PROMPT)
        llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY)
        json_parser = JsonOutputParser()
        chain = prompt_template | llm | json_parser
        evaluation_result = chain.invoke(
            {
                "question_text": question,
                "correct_answer": correct_answer,
                "student_answer": user_answer,
            }
        )
        print(evaluation_result.get("correct_answer_explanation", ""))
        print(evaluation_result.get("error_analysis", ""))
        print(evaluation_result.get("suggestions", ""))
        # 组装返回结果
    #         return {
    #             "success": True,
    #             "analysis": {
    #                 "error_analysis": evaluation_result.get("error_analysis", ""),
    #                 "correct_answer_analysis": evaluation_result.get(
    #                     "correct_answer_explanation", ""
    #                 ),
    #                 "suggestions": evaluation_result.get("suggestions", ""),
    #             },
    #         }
    except Exception as e:
        print(e)


#         return {"success": False, "analysis": None, "error": str(e)}


if __name__ == "__main__":

    question_text = sys.argv[1]
    correct_answer = sys.argv[2]
    user_answer = sys.argv[3]
    # question_text = (
    #     "She _______ to the gym every day to stay fit. A go B goes C going D gone"
    # )
    # correct_answer = "B"
    # user_answer = "A"
    evaluate_choice_question(question_text, correct_answer, user_answer)
